package com.woniu.car.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.woniu.car.common.BeanCopyUtils;
import com.woniu.car.domain.TBackstageAccount;
import com.woniu.car.domain.TRole;
import com.woniu.car.domain.TRoleUser;
import com.woniu.car.dto.RoleDto;
import com.woniu.car.exception.AccountException;
import com.woniu.car.mapper.TBackstageAccountMapper;
import com.woniu.car.mapper.TRoleMapper;
import com.woniu.car.mapper.TRoleUserMapper;
import com.woniu.car.param.BackstageQueryPermissionParam;
import com.woniu.car.service.TRoleUserService;
import com.woniu.car.util.AccountStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author WWX
 * @since 2021-06-19
 */
@Service
public class TRoleUserServiceImpl extends ServiceImpl<TRoleUserMapper, TRoleUser> implements TRoleUserService {
        @Resource
        private TRoleMapper tRoleMapper;
        @Resource
        private TBackstageAccountMapper tBackstageAccountMapper;
    /**
     *@Author 王维鑫
     *@Description 新增用户角色
     *@Param
     *@return
     **/
    @Override
    @Transactional
    public void insertRoleUser(TRoleUser tRoleUser) {
        tRoleUser.setStatus(AccountStatus.NORMAL);
        boolean save = this.save(tRoleUser);
        if(save==false){
            throw new AccountException("新增用户角色失败");
        }
    }
    /**
     *@Author 王维鑫
     *@Description 删除用户角色
     *@Param
     *@return
     **/
    @Override
    @Transactional
    public void updateRoleUser(TRoleUser tRoleUser)  {
        QueryWrapper<TRoleUser> wrapper = new QueryWrapper<>();
        if(null!=tRoleUser.getRoleId()){
            wrapper.eq("role_id",tRoleUser.getRoleId());
        }
        if(null!=tRoleUser.getUserId()){
            wrapper.eq("user_id",tRoleUser.getUserId());
        }
        boolean remove = this.remove(wrapper);
        if(remove==false){
            throw new AccountException("删除用户角色失败");
        }
    }
    /**
     *@Author 王维鑫
     *@Description 查看用户角色列表
     *@Param
     *@return
     **/
    @Override
    @Transactional
    public List<TRoleUser> showRoleUser() {
        List<TRoleUser> list = this.list();
        return list;
    }
    /**
     *@Author 王维鑫
     *@Description 查询用户角色
     *@Param
     *@return
     **/
    @Override
    @Transactional
    public List<TRoleUser> queryRoleUser(TRoleUser tRoleUser) {
        QueryWrapper<TRoleUser> wrapper = new QueryWrapper<>();
        if(null!=tRoleUser.getRoleUserId()){
            wrapper.eq("role_user_id",tRoleUser.getRoleUserId());
        }
        if(null!=tRoleUser.getRoleId() ){
            wrapper.eq("role_id",tRoleUser.getRoleId());
        }
        if(null!=tRoleUser.getUserId() ){
            wrapper.eq("user_id",tRoleUser.getUserId());
        }
        if(null!=tRoleUser.getStatus()){
            wrapper.eq("status",tRoleUser.getStatus());
        }
        List<TRoleUser> list = this.list(wrapper);
        return list;
    }
    /**
     *@Author 王维鑫
     *@Description 根据用户ID查询角色
     *@Param
     *@return
     **/
    @Override
    @Transactional
    public List<RoleDto> queryUserPermission(BackstageQueryPermissionParam param) {
        Integer backstageId = param.getBackstageId();
        //查询用户是否存在
        TBackstageAccount tBackstageAccount = tBackstageAccountMapper.selectById(backstageId);
        if(null==tBackstageAccount){
            throw new AccountException("该员工不存在,请检查");
        }
        TRoleUser tRoleUser = new TRoleUser();
        tRoleUser.setUserId(param.getBackstageId());
        List<TRoleUser> tRoleUsers = this.queryRoleUser(tRoleUser);
        if(tRoleUsers.size()==0){
            throw new AccountException("该用户暂未授权角色");
        }else {
            ArrayList<Integer> integers = new ArrayList<>();
            for (TRoleUser roleUser : tRoleUsers) {
                Integer roleId = roleUser.getRoleId();
                integers.add(roleId);
            }
            List<TRole> tRoles = tRoleMapper.selectBatchIds(integers);
            List<RoleDto> roleDtos = BeanCopyUtils.copyList(tRoles, RoleDto::new);
            return roleDtos;
        }
    }

}
